package com.lanou3g.code0522;

import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import javax.servlet.http.HttpSessionEvent;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Map;

/*
javabean
规定:
1.必须是一个public类(公有类)
2.必须有无参构造方法
3所有属性必须私有
4所有属性必须满足setter/getter方法来访问
(如果 不希望这个属性可读/可写,也可以根据情况
 不提供对应的 setter/getter方法)
 如果是boolean类型的属性那么它的get 方法
 需要写出 isXXX
 当一个类满足了这些要求我们就叫它javabean
 在日常开发中,当我们说javabean的时候,除了满足
 上述4个要求,还有隐藏含义,就是这个类没有什么实际
 复杂的逻辑 就是和数据库/页面对应的,用来存数据的
 */
/*
HttpSessionBindingListener 这个接口给对象一个能力
可以指定自己何时被放入到session对象中
何时从session对象中被销毁
 */

/*
要放到session中的javabean必须实现Serializable接口
否则 当session钝化的时候,session域对象中的Javabean 就丢失了
 */
public class Person implements HttpSessionBindingListener,HttpSessionActivationListener,Serializable{
    private static final long serialVersionUID = 1L;

    private String name;
    private int age;
    private boolean marry;
    private Map<String, String> jobs;
    private String[]titles;

    public String[] getTitles() {
        return titles;
    }

    public Person setTitles(String[] titles) {
        this.titles = titles;
        return this;
    }

    public Map<String, String> getJobs() {
        return jobs;
    }

    public Person setJobs(Map<String, String> jobs) {
        this.jobs = jobs;
        return this;
    }

    public boolean isMarry() {
        return marry;
    }

    public Person setMarry(boolean marry) {
        this.marry = marry;
        return this;
    }

    public Person setName(String name) {
        this.name = name;
        return this;
    }

    public int getAge() {
        return age;
    }

    public Person setAge(int age) {
        this.age = age;
        return this;
    }

    public String getName() {
        return name;

    }

    @Override
    public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("我"+name+"被放入session中");
    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("我"+name+"从session中被销毁了");
    }

    @Override
    public void sessionWillPassivate(HttpSessionEvent httpSessionEvent) {
        System.out.println("我跟session一起去硬盘了");
    }

    @Override
    public void sessionDidActivate(HttpSessionEvent httpSessionEvent) {
        System.out.println("我跟session一起回内存了");
    }
}
